# creemos los datos
set.seed(1234); par(mar=c(0,0,0,0))
x <- rnorm(12,mean=rep(1:3,each=4),sd=0.2)
y <- rnorm(12,mean=rep(c(1,2,1),each=4),sd=0.2)
plot(x,y,col="blue",pch=19,cex=2)
text(x+0.05,y+0.05,labels=as.character(1:12))

#creamos un data.frame
dataFrame <- data.frame(x=x,y=y)
#calculamos la distancia entre las columnas del dataframe por defecto es la euclidea
dist(dataFrame)
#calculamos el dendograma
dataFrame <- data.frame(x=x,y=y)
distxy <- dist(dataFrame)
hClustering <- hclust(distxy)
plot(hClustering)
# si loi queremos pintar mas bonito
myplclust(hClustering,lab=rep(1:3,each=4),lab.col=rep(1:3,each=4))
#hay ejemplos chulisimos en http://gallery.r-enthusiasts.com/RGraphGallery.php?graph=79

#el metodo "complete" no usa la distancia media entre clusters sino la distancia entre los puntos mas alejados de cada cluster
#el resultado depende MUCHO del metodo utilizado 

# no me he enterado mucho de para qe vale el heatmap
dataFrame <- data.frame(x=x,y=y)
set.seed(143)
dataMatrix <- as.matrix(dataFrame)[sample(1:12),]
heatmap(dataMatrix)

# K-Mean clustering definimos primero el numero de clusters
set.seed(1234); par(mar=c(0,0,0,0))
x <- rnorm(12,mean=rep(1:3,each=4),sd=0.2)
y <- rnorm(12,mean=rep(c(1,2,1),each=4),sd=0.2)
plot(x,y,col="blue",pch=19,cex=2)
text(x+0.05,y+0.05,labels=as.character(1:12))

#decido por ejemplo 3 klusters
#como NO ES DETERMINISTA podemos usar el parametro nstart para que devuelva la media de diferentes ejecuciones
dataFrame <- data.frame(x,y)
kmeansObj <- kmeans(dataFrame,centers=3)
names(kmeansObj)
par(mar=rep(0.2,4))
plot(x,y,col=kmeansObj$cluster,pch=19,cex=2)
points(kmeansObj$centers,col=1:3,pch=3,cex=3,lwd=3)

#volvemos al heatmaps
set.seed(1234)
dataMatrix <- as.matrix(dataFrame)[sample(1:12),]
kmeansObj2 <- kmeans(dataMatrix,centers=3)
par(mfrow=c(1,2),mar=rep(0.2,4))
image(t(dataMatrix)[,nrow(dataMatrix):1],yaxt="n")
image(t(dataMatrix)[,order(kmeansObj$cluster)],yaxt="n")
